import 'dart:io';

import 'package:flutter_baselib/lib.dart';

///@date:  2021/2/25 14:22
///@author:  lixu
///@description: 网络请求相关配置
abstract class IHttpConfig {
  ///配置通用的http请求选项[BaseOptions]
  BaseOptions configBaseOptions();

  ///添加拦截器
  ///拦截器队列的执行顺序是FIFO，先添加的拦截器先执行
  List<Interceptor> configInterceptors();

  ///配置https
  bool configHttps(X509Certificate cert, String host, int port);

  ///是否自动添加[LogInterceptors]拦截器,打印http请求相关的日志
  bool configLogEnable();

  ///每个http请求前回调该方法获取host
  ///[url] 当前正在请求的接口url
  String getHttpHost(String url);

  ///返回http成功的响应码
  String configHttpResultSuccessCode();

  ///http请求失败时会回调该方法，判断是否是token失效导致的错误
  ///[errorBean] 请求失败对象
  bool isHttpRespTokenError(HttpErrorBean errorBean);

  ///token失效回调该方法
  ///[errorBean] 请求失败对象
  void onTokenErrorCallback(HttpErrorBean errorBean);

  ///将http响应的json解析成对象
  ///[url] 当前请求url
  ///[jsonData] http响应完整json
  ///[isRespListData] 响应数据是否是List格式
  HttpResultBean<T> parseJsonToObject<T>(String url, Map<String, dynamic> jsonData, bool isRespListData);

  ///http请求显示加载框：isShowLoading为true时，会回调该方法
  ///[tag] 当前请求对应的tag，唯一
  ///[cancelToken] 用于取消http请求
  ///[loadingText] 加载提示提示
  ///[isCancelableDialog] 请求过程中能否关闭加载框
  void showLoading(int tag, CancelToken cancelToken, String loadingText, bool isCancelableDialog);

  ///请求完成，关闭加载框：isShowLoading为true时，会回调该方法
  ///[tag]当前请求对应的tag，唯一
  void hideLoading(int tag);
}
